freeslot(
"S_TOKEN2",
"S_TOKEN3",
"S_TOKEN4",
"S_TOKEN5",
"S_TOKEN6",
"S_TOKEN7",
"S_TOKEN8",
"S_TOKEN9",
"S_TOKEN10",
"S_TOKEN11",
"S_TOKEN12",
"S_TOKEN13",
"S_TOKEN14",
"S_TOKEN15",
"S_GFZFLOWER1",
"S_GFZFLOWER2",
"S_GFZFLOWER3",
"S_GFZFLOWER4",
"S_GFZFLOWER5",
"S_GFZFLOWER6",
"S_GFZFLOWER7",
"S_GFZFLOWER8",
"S_GFZFLOWER9",
"S_GFZFLOWER10",
"S_GFZFLOWER11",
"S_GFZFLOWER12",
"S_GFZFLOWER13",
"S_GFZFLOWER14",
"S_GFZFLOWER15",
"S_GFZFLOWER16",
"S_GFZFLOWER17",
"S_GFZFLOWER18",
"S_GFZFLOWER19",
"S_GFZFLOWER20",
"S_GFZFLOWER21",
"S_GFZFLOWER22",
"S_GFZFLOWER23",
"S_GFZFLOWER24",
"S_GFZFLOWER25",
"S_GFZFLOWER26",
"S_GFZFLOWER27",
"S_GFZFLOWER28",
"S_GFZFLOWER29",
"S_GFZFLOWERZ",
"S_GFZFLOWERY",
"S_GFZFLOWERX"
)

states[S_TOKEN] =	{SPR_TOKE,	A,	1*TICRATE/9,	A_None,		0,	0,	S_TOKEN2}
states[S_TOKEN2] =	{SPR_TOKE,	B,	1*TICRATE/9,	A_None,		0,	0,	S_TOKEN3}
states[S_TOKEN3] =	{SPR_TOKE,	C,	1*TICRATE/9,	A_None,		0,	0,	S_TOKEN4}
states[S_TOKEN4] =	{SPR_TOKE,	D,	1*TICRATE/9,	A_None,		0,	0,	S_TOKEN5}
states[S_TOKEN5] =	{SPR_TOKE,	E,	1*TICRATE/9,	A_None,		0,	0,	S_TOKEN6}
states[S_TOKEN6] =	{SPR_TOKE,	F,	1*TICRATE/9,	A_None,		0,	0,	S_TOKEN7}
states[S_TOKEN7] =	{SPR_TOKE,	G,	1*TICRATE/9,	A_None,		0,	0,	S_TOKEN8}
states[S_TOKEN8] =	{SPR_TOKE,	H,	1*TICRATE/9,	A_None,		0,	0,	S_TOKEN9}
states[S_TOKEN9] =	{SPR_TOKE,	I,	1*TICRATE/9,	A_None,		0,	0,	S_TOKEN10}
states[S_TOKEN10] =	{SPR_TOKE,	J,	1*TICRATE/9,	A_None,		0,	0,	S_TOKEN11}
states[S_TOKEN11] =	{SPR_TOKE,	K,	1*TICRATE/9,	A_None,		0,	0,	S_TOKEN12}
states[S_TOKEN12] =	{SPR_TOKE,	L,	1*TICRATE/9,	A_None,		0,	0,	S_TOKEN13}
states[S_TOKEN13] =	{SPR_TOKE,	M,	1*TICRATE/9,	A_None,		0,	0,	S_TOKEN14}
states[S_TOKEN14] =	{SPR_TOKE,	N,	1*TICRATE/9,	A_None,		0,	0,	S_TOKEN15}
states[S_TOKEN15] =	{SPR_TOKE,	O,	1*TICRATE/9,	A_None,		0,	0,	S_TOKEN}

addHook("MapThingSpawn", function(mo, mthing)
	if not (mo and mo.valid
	and mthing and mthing.valid)
		return
	end
	
	//UDMF support
	
	if mthing.args[0] == 1
		mo.state = S_GFZFLOWERA
	end
	
	if mthing.args[0] == 2
		mo.state = S_GFZFLOWERZ
	end
	
	if mthing.args[0] == 3
		mo.state = S_GFZFLOWERY
	end
	
	if mthing.args[0] == 4
		mo.state = S_GFZFLOWERX
	end
	
	//Binary/ZB support ig?
	
	if (mthing.options & MTF_EXTRA)
		mo.state = S_GFZFLOWERZ
	end
	
	if (mthing.options & MTF_AMBUSH)
		mo.state = S_GFZFLOWERA
	end
end, MT_GFZFLOWER1)

mobjinfo[MT_GFZFLOWER1] = {
	//$Name GFZ Flower
	//$Sprite FWRA0
	//$Category Greenflower
	//$Flags1Text Point left
	//$Flags8Text Point right
	//$arg0 Direction
	//$Arg0Type 11
	//$Arg0Enum {0="Both"; 1="Right"; 2="Left"; 3="Spin"; 4="Demo 2 Spin";}
	doomednum = 800,
	spawnstate = S_GFZFLOWER1,
	seestate = S_GFZFLOWER1,
	spawnhealth = 1000,
	reactiontime = 0,
	painchance = 1,
	speed = 0,
	radius = 16*FRACUNIT,
	height = 40*FRACUNIT,
	mass = 100*FRACUNIT,
	damage = 0,
	flags = MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY
}

states[S_GFZFLOWER1] = {SPR_FWR1,	A,	3,	A_None,	0,	0,	S_GFZFLOWER2}
states[S_GFZFLOWER2] = {SPR_FWR1,	B,	3,	A_None,	0,	0,	S_GFZFLOWER3}
states[S_GFZFLOWER3] = {SPR_FWR1,	C,	3,	A_None,	0,	0,	S_GFZFLOWER4}
states[S_GFZFLOWER4] = {SPR_FWR1,	D,	3,	A_None,	0,	0,	S_GFZFLOWER5}
states[S_GFZFLOWER5] = {SPR_FWR1,	E,	3,	A_None,	0,	0,	S_GFZFLOWER6}
states[S_GFZFLOWER6] = {SPR_FWR1,	F,	3,	A_None,	0,	0,	S_GFZFLOWER7}
states[S_GFZFLOWER7] = {SPR_FWR1,	G,	3,	A_None,	0,	0,	S_GFZFLOWER8}
states[S_GFZFLOWER8] = {SPR_FWR1,	H,	3,	A_None,	0,	0,	S_GFZFLOWER9}
states[S_GFZFLOWER9] = {SPR_FWR1,	I,	3,	A_None,	0,	0,	S_GFZFLOWER10}
states[S_GFZFLOWER10] = {SPR_FWR1,	J,	3,	A_None,	0,	0,	S_GFZFLOWER11}
states[S_GFZFLOWER11] = {SPR_FWR1,	K,	3,	A_None,	0,	0,	S_GFZFLOWER12}
states[S_GFZFLOWER12] = {SPR_FWR1,	L,	3,	A_None,	0,	0,	S_GFZFLOWER13}
states[S_GFZFLOWER13] = {SPR_FWR1,	M,	3,	A_None,	0,	0,	S_GFZFLOWER14}
states[S_GFZFLOWER14] = {SPR_FWR1,	N,	3,	A_None,	0,	0,	S_GFZFLOWER15}
states[S_GFZFLOWER15] = {SPR_FWR1,	O,	3,	A_None,	0,	0,	S_GFZFLOWER16}
states[S_GFZFLOWER16] = {SPR_FWR1,	P,	3,	A_None,	0,	0,	S_GFZFLOWER17}
states[S_GFZFLOWER17] = {SPR_FWR1,	Q,	3,	A_None,	0,	0,	S_GFZFLOWER18}
states[S_GFZFLOWER18] = {SPR_FWR1,	R,	3,	A_None,	0,	0,	S_GFZFLOWER19}
states[S_GFZFLOWER19] = {SPR_FWR1,	S,	3,	A_None,	0,	0,	S_GFZFLOWER20}
states[S_GFZFLOWER20] = {SPR_FWR1,	T,	3,	A_None,	0,	0,	S_GFZFLOWER21}
states[S_GFZFLOWER21] = {SPR_FWR1,	U,	3,	A_None,	0,	0,	S_GFZFLOWER22}
states[S_GFZFLOWER22] = {SPR_FWR1,	V,	3,	A_None,	0,	0,	S_GFZFLOWER23}
states[S_GFZFLOWER23] = {SPR_FWR1,	W,	3,	A_None,	0,	0,	S_GFZFLOWER24}
states[S_GFZFLOWER24] = {SPR_FWR1,	X,	3,	A_None,	0,	0,	S_GFZFLOWER25}
states[S_GFZFLOWER25] = {SPR_FWR1,	Y,	3,	A_None,	0,	0,	S_GFZFLOWER26}
states[S_GFZFLOWER26] = {SPR_FWR1,	Z,	3,	A_None,	0,	0,	S_GFZFLOWER27}
states[S_GFZFLOWER27] = {SPR_FWR1,	26,	3,	A_None,	0,	0,	S_GFZFLOWER28}
states[S_GFZFLOWER28] = {SPR_FWR1,	27,	3,	A_None,	0,	0,	S_GFZFLOWER29}
states[S_GFZFLOWER29] = {SPR_FWR1,	28,	3,	A_None,	0,	0,	S_GFZFLOWER1}

states[S_GFZFLOWERA] = {SPR_FWR1,	A|FF_ANIMATE,	-1,	A_None,	14,	3,	nil}
states[S_GFZFLOWERZ] = {SPR_FWR1,	P|FF_ANIMATE,	-1,	A_None,	14,	3,	nil}
states[S_GFZFLOWERY] = {SPR_FWR1,	30|FF_ANIMATE,	-1,	A_None,	9,	3,	nil}
states[S_GFZFLOWERX] = {SPR_FWR1,	40|FF_ANIMATE,	-1,	A_None,	8,	3,	nil}

addHook("MobjThinker", function(mo)
	local tokenspark = P_SpawnMobj(mo.x + P_RandomRange(-25, 25) * FRACUNIT, mo.y + P_RandomRange(-25, 25) * FRACUNIT, mo.z + P_RandomRange(-5, 25) * FRACUNIT, MT_SUPERSPARK)
		tokenspark.scale = 1*FRACUNIT/4
			tokenspark.color, tokenspark.colorized = SKINCOLOR_GALAXY, true
end, MT_TOKEN)

addHook("PlayerThink", function(p)
if p.mo and p.mo.valid
and p.skincolor == SKINCOLOR_ENDLESS_STARS then
	local endless = P_SpawnMobj(p.mo.x + P_RandomRange(-30, 30) * FRACUNIT, p.mo.y + P_RandomRange(-30, 30) * FRACUNIT, p.mo.z + P_RandomRange(0, 60) * FRACUNIT, MT_SUPERSPARK)
		endless.scale = p.mo.scale/2
			endless.color, endless.colorized = SKINCOLOR_GALAXY, true
	end
end)
